/**
* \file Terrain.h
* Définie les fonctions utilisées dans Terrain.c
*/

#ifndef TERRAIN_H
#define TERRAIN_H
#include "constantes.h"
#include "formes.h"

extern int Formes[9][MAX_TAILLE_PIECE_X][MAX_TAILLE_PIECE_Y];

/**
 * \struct Terrain
 * \brief définie un terrain de dimension DimX*DimY comme un tableau de pièces.
 */
struct Terrain
{
	int DimX;
	int DimY;
	Piece* ter[100][100];
};

typedef struct Terrain Terrain;

/**
* \brief Initialise le terrain avec une hauteur de TAILLE_Y blocs et une largeur de TAILLE_X blocs où l'on met VIDE.Avec TAILLE_X et TAILLE_Y constantes.
*/
void Initialiser_terrain(Terrain* t);

/**
* \brief Verifie que la position d'une pièce dans le terrain est correcte en (x,y).
* \param x coordonnée horizontale d'une pièce
* \param y coordonnée verticale d'une pièce
*/
int Position_est_correcte(int x, int y);

/**
* \brief Renvoie l'adresse d'une piece
* \param x coordonnée horizontale de la pièce
* \param y coordonnée verticale d'une pièce
*/
Piece* Get_Piece_X_Y(Terrain* t, int x, int y);

/**
* \brief Retourne la dimension de la largeur du terrain
*/
int Get_DimX_terrain(Terrain* t);

/**
* \brief Retourne la dimension de la hauteur du terrain
*/
int Get_DimY_terrain(Terrain* t);

/**
* \brief Supprime une ligne du terrain
* \param l ligne à supprimer
*/
void Supprimer_ligne (Terrain* t, int l);

/**
* \brief Cherche les lignes pleines
*/
int chercher_ligne_pleine(Terrain* t);

/**
* \brief Ajoute une pièce en haut au milieu du terrain
*/
int Ajouter_piece(Terrain* t, Piece* p);

/**
* \brief Déplace une pièce sur le terrain
* \param p pièce à déplacer
* \param d direction dans laquelle déplacer la pièce (droite,gauche,bas)
*/
void Deplacer_piece(Piece* p, Terrain* t, Direction d);

/**
* \brief Test si il y a une collision sur le terrain
* \param p pièce à utiliser pour le test
* \param d direction dans laquelle tester la collision la pièce (droite,gauche,bas)
*/
int Test_collision(Piece* p, Terrain* t, Direction d);

/**
* \brief Efface le terrain
*/
void Effacer_terrain(Terrain* t);


/**
* \brief Affiche le terrain
*/
void afficher_terrain(Terrain* t);

#endif
